CREATE OR REPLACE PACKAGE "PK_CARGA_ARCHIVO" AS 

  /* TODO enter package declarations (types, exceptions, methods etc) here */ 
  G_ESTADO_ACTIVO           VARCHAR2(20):='T06001';
  G_CARGA_ESTADO_ERROR      VARCHAR2(20):='T05001';
  G_CARGA_ESTADO_EXITO      VARCHAR2(20):='T05003';
  G_CARGA_ESTADO_PROCESO    VARCHAR2(20):='T05002';
  PROCEDURE SP_OBTENER_SCHEDULER(P_ID_CONFIG_SCHEDULER NUMBER,P_L_FECHA DATE,PS_SCHEDULER OUT SYS_REFCURSOR);
  PROCEDURE SP_OBTENER_SCHEDULERS(PS_SCHEDULER OUT SYS_REFCURSOR);
  PROCEDURE SP_CARGA_MOVIMIENTO_INICIO(P_ID_CONFIG_SCHEDULER NUMBER,P_USUARIO_EJECUCION VARCHAR2,P_CARGA_HORA VARCHAR2,P_EXISTE_ARCHIVO NUMBER,O_ID_BITACORA OUT NUMBER);
  PROCEDURE SP_CARGA_MOVIMIENTO_FINALIZAR(P_ID_CONFIG_SCHEDULER NUMBER,P_ID_BITACORA NUMBER,P_MENSAJE VARCHAR2,P_ESTADO VARCHAR2);
  PROCEDURE SP_REGISTRAR_LOG(P_ID_BITACORA NUMBER,P_FECCHA DATE,P_CODIGO_SERVICIO VARCHAR2,P_TRAZABILIDAD VARCHAR2,P_REGISTRO VARCHAR2,P_APP VARCHAR2,P_INICIO VARCHAR2,P_FIN VARCHAR2);
  PROCEDURE SP_ACTUALIZAR_DATOS_REGISTRO(P_ID_BITACORA NUMBER);
  
END PK_CARGA_ARCHIVO;
/


CREATE OR REPLACE PACKAGE BODY "PK_CARGA_ARCHIVO" AS


PROCEDURE SP_OBTENER_SCHEDULER(P_ID_CONFIG_SCHEDULER NUMBER,P_L_FECHA DATE,PS_SCHEDULER OUT SYS_REFCURSOR)AS
BEGIN
 OPEN PS_SCHEDULER FOR
      SELECT 
        ID_CONFIG_SCHEDULER,ID_ESTADO_C,DESCRIPCION,DIA_DEL_MES,HORA_DEL_DIA,MINUTOS,SEGUNDOS,DIA_DE_SEMANA,
        P_L_FECHA,NOMBRE_ARCHIVO||TO_CHAR(P_L_FECHA,SUFIJO)||EXTENSION NOMBRE_ARCHIVO
      FROM 
        TIICI_CONFIG_SCHEDULER
        WHERE ID_CONFIG_SCHEDULER=P_ID_CONFIG_SCHEDULER;
END;

PROCEDURE SP_OBTENER_SCHEDULERS(PS_SCHEDULER OUT SYS_REFCURSOR)AS
    L_FECHA DATE;
    L_DIA_MES VARCHAR2(2):='*';
    L_HORA_DIA VARCHAR2(2):='*';
    L_MINUTO_HORA VARCHAR2(2):='*';
    L_SEGUNDO_MINUTO VARCHAR2(2):='*';
    L_DIA_SEMANA VARCHAR2(2):='*';
    BEGIN 
    
    SELECT SYSDATE INTO L_FECHA FROM DUAL;
    
    --OBTENERMOS LOS SCHEDULER PARA CARGAR
    OPEN PS_SCHEDULER FOR
      SELECT 
        ID_CONFIG_SCHEDULER,ID_ESTADO_C,DESCRIPCION,DIA_DEL_MES,HORA_DEL_DIA,MINUTOS,SEGUNDOS,DIA_DE_SEMANA,
        SYSDATE FECHA,NOMBRE_ARCHIVO||TO_CHAR(SYSDATE,SUFIJO)||EXTENSION NOMBRE_ARCHIVO,
        TO_CHAR(L_FECHA,'dd'),TO_CHAR(L_FECHA,'HH24'),TO_CHAR(L_FECHA,'MI'),TO_CHAR(L_FECHA,'SS'),
      to_char(SYSDATE, 'D', 'NLS_DATE_LANGUAGE=SPANISH')-2
      FROM 
        IICI.TIICI_CONFIG_SCHEDULER
        WHERE 
        (ID_ESTADO_C=PK_CARGA_ARCHIVO.G_ESTADO_ACTIVO);
END;

PROCEDURE SP_CARGA_MOVIMIENTO_INICIO(P_ID_CONFIG_SCHEDULER NUMBER,P_USUARIO_EJECUCION VARCHAR2,P_CARGA_HORA VARCHAR2,P_EXISTE_ARCHIVO NUMBER,O_ID_BITACORA OUT NUMBER) AS
  --L_TIPO_CARGA NUMBER;
  L_ESTADO_CARGA VARCHAR2(20);
  L_ID_BITACORA NUMBER;
  L_FECHA_DATA  DATE;
  L_USUARIO_REGISTRO VARCHAR2(10);
  L_BITACORA  TIICI_BITACORA%ROWTYPE;
  --L_INDICADOR_ESTADO NUMBER:=0;
  --L_NOMBRE_PROCESO     VARCHAR2(100);
  L_NOMBRE_ARCHIVO    VARCHAR2(100);
  --L_NOMBRE_TABLA     VARCHAR2(100);
  L_TIPO_SCHEDULER  NUMBER;
  L_SQL_AXILIAR   VARCHAR2(200);
  L_ERROR         VARCHAR2(500);
  BEGIN
      BEGIN
      L_ESTADO_CARGA:=PK_CARGA_ARCHIVO.G_CARGA_ESTADO_PROCESO;
      SELECT SQ_BITACORA.NEXTVAL INTO L_ID_BITACORA FROM DUAL;
      dbms_output.put_line('P_CARGA_HORA:'||P_CARGA_HORA);
      SELECT TO_DATE(P_CARGA_HORA,'dd/MM/YYYY HH24:MI:SS') INTO L_FECHA_DATA  FROM DUAL;
      
      dbms_output.put_line('L_ID_BITACORA:'||L_ID_BITACORA);
      
      SELECT NOMBRE_ARCHIVO||TO_CHAR(L_FECHA_DATA,SUFIJO)||EXTENSION 
      INTO L_NOMBRE_ARCHIVO
      FROM TIICI_CONFIG_SCHEDULER WHERE ID_CONFIG_SCHEDULER=P_ID_CONFIG_SCHEDULER;
      
      dbms_output.put_line('L_NOMBRE_ARCHIVO:'||L_NOMBRE_ARCHIVO);
      
      IF(P_EXISTE_ARCHIVO =1) THEN 
          -- REGISTRAMOS LA BITACORA
          INSERT INTO TIICI_BITACORA (ID_BITACORA,ID_ESTADO_C,ID_CONFIG_SCHEDULER,NOMBRE_ARCHIVO,FECHA_INICIO,OBSERVACIONES,
          FECHA_DATO,FECHA_PROCESO)
          VALUES(L_ID_BITACORA,L_ESTADO_CARGA,P_ID_CONFIG_SCHEDULER,L_NOMBRE_ARCHIVO,SYSDATE,'Iniciando la carga.',
          L_FECHA_DATA,TO_CHAR(SYSDATE,'YYYYMMDDHH24MI'));
          
          INSERT INTO TIICI_DETALLE_BITACORA(ID_DETALLE_BITACORA,ID_BITACORA,NUM_FILA,OBSERVACION,NOMBRE_ERROR,TIPO_ERROR_C)
          VALUES(SQ_DETALLE_BITACORA.NEXTVAL,L_ID_BITACORA,1,'CARGANDO : '||L_NOMBRE_ARCHIVO,'LOG','1');
          COMMIT;
          
          DELETE FROM TIICI_LOG WHERE TRUNC(FEC_CONSULTA)=TRUNC(L_FECHA_DATA);
          COMMIT;
   
      ELSE
          INSERT INTO TIICI_BITACORA (ID_BITACORA,ID_ESTADO_C,ID_CONFIG_SCHEDULER,NOMBRE_ARCHIVO,FECHA_INICIO,OBSERVACIONES,FECHA_PROCESO)
          VALUES(L_ID_BITACORA,PK_CARGA_ARCHIVO.G_CARGA_ESTADO_ERROR,P_ID_CONFIG_SCHEDULER,L_NOMBRE_ARCHIVO,SYSDATE,'Archivo no se encuentra',TO_CHAR(SYSDATE,'YYYYMMDDHH24MI'));
          COMMIT;
      END IF ;       
       
       EXCEPTION
           WHEN OTHERS THEN
            L_ERROR:=SUBSTR(SQLERRM,1,150);
            INSERT INTO TIICI_BITACORA (ID_BITACORA,ID_ESTADO_C,ID_CONFIG_SCHEDULER,NOMBRE_ARCHIVO,FECHA_INICIO,OBSERVACIONES,FECHA_PROCESO)
            VALUES(L_ID_BITACORA,PK_CARGA_ARCHIVO.G_CARGA_ESTADO_ERROR,P_ID_CONFIG_SCHEDULER,L_NOMBRE_ARCHIVO,SYSDATE,'ERROR GENERAL',TO_CHAR(SYSDATE,'YYYYMMDDHH24MI'));
            INSERT INTO TIICI_DETALLE_BITACORA(ID_DETALLE_BITACORA,ID_BITACORA,NUM_FILA,OBSERVACION,NOMBRE_ERROR,TIPO_ERROR_C)
            VALUES(SQ_DETALLE_BITACORA.NEXTVAL,L_ID_BITACORA,1,L_ERROR,'LOG','1');
            
            COMMIT;
        END;
        
        O_ID_BITACORA:= L_ID_BITACORA;
END;

PROCEDURE SP_CARGA_MOVIMIENTO_FINALIZAR(P_ID_CONFIG_SCHEDULER NUMBER,P_ID_BITACORA NUMBER,P_MENSAJE VARCHAR2,P_ESTADO VARCHAR2)AS
L_COD_SECU NUMBER(16,0) :=0;
BEGIN

  UPDATE TIICI_BITACORA 
                SET  
                  ID_ESTADO_C=P_ESTADO,
                  FECHA_FIN=SYSDATE,
                  OBSERVACIONES=P_MENSAJE
                  WHERE ID_BITACORA=P_ID_BITACORA;
  DELETE FROM TIICI_CORPORATIVA WHERE COD_MULT='T08';
  COMMIT;
  
  FOR X IN (SELECT DISTINCT APLICATIVO FROM TIICI_LOG)
  LOOP
    L_COD_SECU:=L_COD_SECU+1;
    INSERT INTO TIICI_CORPORATIVA (COD_MULT,COD_ELE,VALOR1)
    VALUES('T08',LPAD(L_COD_SECU,3,'0'),X.APLICATIVO);
  END LOOP;
   DELETE FROM TIICI_CORPORATIVA WHERE COD_MULT='T07';
  L_COD_SECU:=1;
  FOR X IN (SELECT DISTINCT CODIGO_SERVICIO FROM TIICI_LOG)
  LOOP
    L_COD_SECU:=L_COD_SECU+1;
    INSERT INTO TIICI_CORPORATIVA (COD_MULT,COD_ELE,VALOR1)
    VALUES('T07',LPAD(L_COD_SECU,3,'0'),X.CODIGO_SERVICIO);
  END LOOP;

END;
PROCEDURE SP_REGISTRAR_LOG(P_ID_BITACORA NUMBER,P_FECCHA DATE,P_CODIGO_SERVICIO VARCHAR2,P_TRAZABILIDAD VARCHAR2,P_REGISTRO VARCHAR2,P_APP VARCHAR2,P_INICIO VARCHAR2,P_FIN VARCHAR2)
AS
L_COD_LOG NUMBER;
L_ID_DETALLE_BITACORA NUMBER;
L_ERROR VARCHAR2(4000);
BEGIN
  SELECT SQ_LOG.NEXTVAL INTO L_COD_LOG FROM DUAL;

  INSERT INTO TIICI_LOG  (    COD_LOG,   NUM_REGISTRO,  FEC_CONSULTA,
    ID_BITACORA,    CODIGO_SERVICIO,    TRAZABILIDAD,    APLICATIVO,    HORA_CONSULTA,    HORA_RESPUESTA  )
  VALUES
  (L_COD_LOG,P_REGISTRO,P_FECCHA,P_ID_BITACORA,P_CODIGO_SERVICIO,P_TRAZABILIDAD,P_APP,P_INICIO,P_FIN);
   EXCEPTION
           WHEN OTHERS THEN
           BEGIN
            L_ERROR:=SUBSTR(SQLERRM,1,150);
            SELECT SQ_DETALLE_BITACORA.NEXTVAL INTO L_ID_DETALLE_BITACORA FROM DUAL;
            INSERT INTO TIICI_DETALLE_BITACORA(ID_DETALLE_BITACORA,ID_BITACORA,NUM_FILA,OBSERVACION,NOMBRE_ERROR,TIPO_ERROR_C)
            VALUES(L_ID_DETALLE_BITACORA,P_ID_BITACORA,1,L_ERROR,'ERROR','1');            
            END;
END;

PROCEDURE SP_ACTUALIZAR_DATOS_REGISTRO(P_ID_BITACORA NUMBER)
AS
L_COD_LOG NUMBER;
BEGIN
  
  FOR X IN(
  SELECT COD_LOG,NOMBRE,APEPAT,APEMAT,CODOFI,DESOFI 
    FROM (
    SELECT * FROM TIICI_LOG WHERE ID_BITACORA=P_ID_BITACORA) LG INNER JOIN 
    VW_LDAP LD ON(LG.NUM_REGISTRO=LD.CODUSU)
  )LOOP
    UPDATE TIICI_LOG SET NUM_OFICINA=X.CODOFI,DES_OFICINA=X.DESOFI,NOM_COMPLETO=X.NOMBRE||' '||X.APEPAT||' '||X.APEMAT 
    WHERE COD_LOG=X.COD_LOG;
  END LOOP;
  
END;


END PK_CARGA_ARCHIVO;
/
